package com.example.gulimall.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

/**
 * author: jyf
 * created by :2022/9/9
 * 在网关配置跨域
 */
@Configuration
public class CorsConfig {

    /**
     * springboot提供了一个CorsWebFilter
     * new CorsWebFilter的时候需要提供一个跨域的配置信息CorsConfigurationSource
     * 但是CorsConfigurationSource是一个接口，所以要找一个它的实现，就找到了UrlBasedCorsConfigurationSource
     * 将其new出来，注意选择响应式包下的，即reactive包下的
     *
     * @return
     */
    @Bean
    public CorsWebFilter corsWebFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //1、配置跨域，允许哪些头进行跨域
        corsConfiguration.addAllowedHeader("*");
        //允许哪些方法（put、get、post等）进行跨域
        corsConfiguration.addAllowedMethod("*");
        //允许哪个请求来源进行跨域
        corsConfiguration.addAllowedOrigin("*");
        //是否允许携带cookie进行跨域
        corsConfiguration.setAllowCredentials(true);

        //注册跨域配置，任意路径都需要配置跨域
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsWebFilter(source);
    }
}
